home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TeX 1995 July
/
TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO
/
systems
/
atari
/
birkhahn-metafont-packed-disks
/
mf27-2_2e-disk2.zoo
/
doc.lzh
/
INSTALL.DOC
< prev
next >
Wrap
Text File
|
1991-09-10
|
17KB
|
336 lines
Spezifikation zu einem neuen Install-Programm
=============================================
Autoren : Lutz Birkhahn, Stefan Lindner
History:
Version| Datum | Erläuterung
-------|----------|---------------------------------------------------------
0.0 | 16/05/90 | Urfassung (Lutz Birkhahn, Stefan Lindner)
0.5 | 90-91 | Prototyp (Stefan Steffens)
0.9 | 27/06/91 | Testversion (Lutz Birkhahn = LB)
0.99 | 05/07/91 | ß-Test (LB)
0.991| 12/07/91 | Filevariable source-dir eingeführt (LB)
0.992| 22/08/91 | #setdir funktioniert jetzt auch im Root-Directory (LB)
| | TOS-Fehlermeldungen bei #execute werden beim Namen genannt
0.993| 28/08/91 | bei #extract und #copy kann nun "alles ersetzt" werden,
| | #copy achtet nun auch auf bereits vorhandene Dateien
| | Datum/Uhrzeit und Attribute werden jetzt mitkopiert (LB)
1.0 | 11/09/91 | In #pathrequest kann nun ein Ordner (als Filename) ein-
| | gegeben und damit erzeugt werden. (LB)
| | Die Pfade sind nun alle in klein geschrieben (auch in
| | #replace-Strings). (LB)
-------|----------|---------------------------------------------------------
(Anmerkung: Wie der Titel sagt, handelt es sich bei dieser Datei um eine
Spezifikation bzw. eine daraus entstandene Dokumentation. Es ist möglich,
da₧ die eine oder andere Beschreibung nicht komplett auf den momentanen
Zustand des Programmes zutrifft. In diesem Fall ist die entsprechende
Beschreibung als Wunsch für zukünftige Versionen aufzufassen.)
1. Ziele
========
Das neue Install-Programm soll das bisher existierende Install-Programm
vollständig ersetzen.
Die Install-Datei soll wesentlich besser lesbar und damit auch leichter
vom Benutzer an eigene Bedürfnisse anpa₧bar sein.
Der Benutzer soll die Möglichkeit haben, die Installation nach seinen
Wünschen auch ohne Änderung der Install-Datei modifizieren zu können
(sog. Teilinstallationen).
Die Installation soll insgesamt noch sicherer werden, z.B. durch Abfrage
des vorhandenen Speicherplatzes auf der Festplatte und durch Überprüfung,
ob die eingelegte Diskette auch die richtige ist.
Das Install-Programm soll unabhängig vom zu installierenden Paket sein;
prinzipiell sollte jedes beliebige Programm mit einer geeigneten Install-
Datei installiert werden können.
2. Prinzipieller Programmablauf
===============================
Nach dem Starten des Install-Programmes wird zunächst (per Fileselektorbox)
eine Install-Datei ausgewählt. Die Install-Datei mu₧ dort stehen, wo auch die
ganzen zu installierenden Dateien (bzw. deren Verzeichnisse) sich befinden,
im Normalfall also im Root-Verzeichnis auf der Diskette. Alternativ kann man
sich die Dateien aber auch auf die Festplatte oder in eine Ramdisk kopieren,
dann mu₧ aber auch die Install-Datei von dort ausgewählt werden.
Grund: alle "Source"-Dateien werden mit einem relativem Pfad
angegeben (z.B. "tex\tex.ttp"). Das Install-Prg. hängt dann
noch den Pfad, wo es die Install-Datei gefunden hat (z.B. "a:\"
oder "c:\tmp\"), davor und lädt von dort alle zu kopierenden
Dateien.
Install-Dateien haben im allgemeinen den Namen des zu installierenden Pakets
(TeX, METAFONT, Preview, NECP6, SLM804, NL10 ...) und als Extension die
Zeichenfolge ".INS", also z.B. "TEX.INS".
Nun wird die Installdatei eingelesen (die komplette Datei wird zunächst in
einen Puffer gelesen, damit die Diskette auch gewechselt werden kann, falls
von Diskette installiert wird), und Befehl für Befehl abgearbeitet. Im
Normalfall wird am Anfang der Datei eine Folge von #banner-, #menu- und
#showmenu-Befehlen stehen, woraufhin der Benutzer eine GEM-Dialogbox mit
dem beschriebenen Inhalt bekommt, in der er den gewünschten Umfang der
Installation auswählen kann. Abhängig von den selektierten Optionen werden
boolesche Variablen gesetzt, die von den #if/#then/#else-Befehlen ausgewer-
tet werden können. Wenn ein Diskettenwechsel nötig ist, erscheint eine
Alertbox mit entsprechendem Inhalt (natürlich nur, wenn von Laufwerk A:
oder B: installiert wird). Wenn Fehler auftreten, wird dies vom Install-
Programm automatisch in Alertboxen mitgeteilt, z.B. "Prüfsummenfehler
beim Kopieren der Datei metafont\inimf.prg. [Nochmal versuchen][Ignorieren]
[Abbruch]" und entsprechend des angeklickten Buttons weiterverfahren.
Sobald die Installation beendet ist, wird die Anzahl der aufgetretenen Fehler,
Probleme oder Warnungen bzw. eine Erfolgsmeldung ausgegeben. Schlie₧lich kann
der Benutzer auswählen, ob er ein weiteres Paket installieren oder das Install-
Programm beenden möchte.
3. Syntax der Install-Datei
===========================
Die Install-Datei ist formatfrei, d.h. es können an jeder Stelle zwischen
den syntaktischen Elementen ("Wörtern") beliebig viele Leerzeichen, TABs,
Zeilenschaltungen (CR/LF) und Kommentare stehen; das Zeilenende wird nicht
ausgewertet. Sie besteht aus beliebig vielen Befehlen mit entsprechender
Parameteranzahl. Kommentare werden mit einem Prozentzeichen ("%") eingeleitet
und gelten bis zum Zeilenende (genau wie bei TeX, METAFONT etc.).
Die Syntaxbeschreibung erfolgt in EBNF in ähnlicher Form wie die Beschreibung
der Setup-Datei in Stefan Lindners TeX-Beschreibung:
::= das nichtterminale Symbol auf der linken Seite wird durch die
rechte Seite definiert
<name> nichtterminales Symbol
| Alternative ("oder")
[ausdruck] Ausdruck ist optional
(ausdruck)* Ausdruck darf beliebig oft (auch gar nicht) auftreten
(ausdruck)+ Ausdruck darf ein- oder mehrmal auftreten
Terminale Symbole werden ohne schmückendes Beiwerk hingeschrieben. Kommentare
und mehrfach auftretende Leerzeichen etc. werden nicht mit aufgeführt, siehe
oben. Die Semantik der einzelnen Befehle wird nach der Syntaxbeschreibung
erläutert.
<install file> ::= <commands>
<commands> ::= (<command>)+
<command> ::= #banner "<string>"
| #menu "<string>" <boolean var>
| #showmenu
| #print "<string>"
| #pathrequest "<string>" <file var>
| #request "<string>" [<boolean var>]
| #if <boolean var> <commands> [#else <commands>] #fi
| #requiredspace <abspath> <size>
| #setdir <abspath>
| #copy <relfile> [<checksum>]
| #extract <relfile> <pattern>
| #replace "<string>" "<string>" <absfile>
| #checkdisklabel <filename>
| #execute <abspath> (<parameter>)*
| #end
<absfile> ::= <drive>:\<path>\<filename>
| <file var>[\<path>][\<filename>]
<abspath> ::= <drive>:\<path>
| <file var>[\<path>]
<relfile> ::= <path>\<filename>
<path> ::= [<filename>](\<filename>)*
<checksum> ::= <hex digit><hex digit><hex digit><hex digit>
<size> ::= <integer>
| <integer>k | <integer>K
| <integer>m | <integer>M
<boolean var> ::= <variable>
<file var> ::= <variable>
Der Rest sollte sich ziemlich von selbst erklären, aber der Vollständigkeit
halber noch die informellen Definitionen (Puristen und Masochisten dürfen
sich die restlichen Definitionen auch formal auf ein Schmierblatt notieren):
<drive> ein Buchstabe von 'a' bis 'p' (gro₧ oder klein geschrieben)
<filename> sind maximal 8 Zeichen und optional ein Punkt ('.') und
bis zu drei weitere Zeichen. Zeichen ist in diesem Zusammen-
hang alles au₧er '.', ':', '\', '?' und '*' (TOS verkraftet
ziemlich viel)
<pattern> ist ein <filename>, der auch '?' und '*' enthalten darf (an
den bei TOS erlaubten Stellen)
<string> ist alles au₧er doppelte Anführungszeichen ('"'). Letztere
werden als '\"' geschrieben (wie in C üblich). Ein Zeilen-
ende, das nicht im String auftauchen soll, wird durch ein
vorangestelltes '\' eingegeben (also '\' am Zeilenende).
'\\' wird durch ein einzelnes '\' ersetzt. Wenn der Anfang
des Strings den Namen einer Filevariablen <file var> angibt,
wird deren Inhalt in den String eingefügt
<variable> ist eine Folge von Zeichen au₧er '\', '.', ':', '#' und
den verschiedenen "Leerzeichen"
<hex digit> ist eine Ziffer (0-9) oder (a-f) oder (A-F)
<integer> ist eine ganze positive Zahl (das mu₧ nicht weiter erklärt
werden, oder?!)
Nun zur Semantik der einzelnen Befehle:
#banner "<string>"
<string> wird in der bei #showmenu erscheinenden Dialogbox als Überschrift
angezeigt. Wenn vor einem #showmenu mehrere #banner angegeben sind, so wird
nur der letzte verwendet.
Bsp.: #banner "TeX-Installation"
#menu "<string>" <boolean var>
Gibt eine auszuwählende Option in der bei #showmenu erscheinenden Dialog-
box an. Mit Hilfe von <string> wird ein erklärender Text und maximal zwei
Buttons angegeben. Buttons werden durch Umschlie₧en des Button-Textes mit
eckigen Klammern eingegeben. Wenn ein Button-Text mit einem Ausrufezeichen
anfängt, so ist dieser Button bereits zu Beginn des Dialogs selektiert.
Wenn zwei Buttons spezifiziert werden, so werden diese als Radio-Buttons
dargestellt, von denen der erste (linke) Button defaultmä₧ig selektiert
ist, wenn kein '!' angegeben wurde. Ein einzelner Button ist defaultmä₧ig
nicht selektiert. Wenn das Zeichen '[', ']' oder '!' selbst ausgegeben
werden soll, so kann dies an den betreffenden Stellen durch Voranstellen
eines Backslash ('\') erfolgen. Die boolesche Variable <boolean var>
erhält den Wert true, wenn der linke (bzw. einzige) Button selektiert
wurde.
#showmenu
Bringt die bisher angesammelten #banner- und #menu-Befehle in einer Dialog-
box auf den Bildschirm und wartet auf die Auswahl des Benutzers. Die selek-
tierten Optionen werden in den bei #menu angegebenen booleschen Variablen
als true eingetragen, die restlichen boolschen Variablen werden auf false
gesetzt.
#print "<string>"
Gibt <string> als Text auf dem Bildschirm aus.
#pathrequest "<string>" <file var>
Öffnet eine Fileselektorbox und speichert den ausgewählten Filenamen in
der File-Variable <file var>. Falls TOS 1.4 oder neuer installiert ist,
wird <string> als Überschrift der Fileselektorbox ausgegeben. Falls in
<file var> bereits etwas eingetragen ist, wird dieser Name als Default-
Pfad in der Fileselektorbox gesetzt, ansonsten der Pfad der Install-Datei.
Der vorgewählte Filename ist '*.*'. Wird zusätzlich zum Pfad ein Dateiname
eingegeben, zählt dies als neu zu erzeugender Ordner.
#request "<string>" [<boolean var>]
Bringt via form_alert() eine Alarmbox auf den Bildschirm. <string> hat
ab dem zweiten Zeichen das bei form_alert() übliche Format, das erste
Zeichen ist eine Ziffer, die den Default-Button angibt ('0' = kein
Default, '1' = erster Button ist Default, ...). Das Format von <string>
ist also:
"<default-button>[<icon>][<text>][<buttons>]"
Falls <boolean var> angegeben wurde, wird das Ergebnis von form_alert()
dort abgespeichert, wobei 1 als false und alle Zahlen grö₧er als 1 als
true gespeichert werden.
Daraus folgt, da₧ es nicht sinnvoll ist, in einer mit #request
erzeugten Alarmbox mehr als zwei Buttons anzugeben. Man wird diesen
Befehl also nur entweder als Hinweis (1 Button "OK", keine <boolean
var> angegeben) oder als Frage, die mit ja oder nein beantwortet
werden kann (2 Buttons, Ergebnis wird in <boolean var> abgespeichert),
verwenden.
#if <boolean var> <commands> [#else <commands>] #fi
Wenn der Wert von <boolean var> true ist, werden die <commands> vor dem
#else oder #fi ausgeführt. Ist der Wert false, werden die ersten
<commands> übersprungen und entweder die Befehle zwischen #else und
#fi ausgeführt, oder gar nichts, wenn der #else-Teil fehlt. Es dürfen
mehrere #if-#else-#fi-Konstrukte verschachtelt werden.
#requiredspace <abspath> <size>
Fragt den noch vorhandenen Speicherplatz auf dem Gerät, das durch <abspath>
angegeben wird, ab (wichtig ist nur der Laufwerksname im ersten Zeichen
von <abspath>, der restliche Pfad wird ignoriert). Falls der vorhandene
Speicherplatz kleiner als <size> ist, gibt es eine Fehlermeldung. Der
Benutzer kann dann entscheiden, ob er die Meldung ignorieren oder die
Installation abbrechen will (ignorieren kann z.B. nützlich sein, wenn man
das Paket auf einer komprimierenden RAM-Disk installieren will).
#setdir <abspath>
Setzt das aktuelle Direktory auf <abspath>. Dabei werden alle Ordner
in <abspath>, die noch nicht existieren, erzeugt. Nachfolgende #copy-
und #extract-Befehle erzeugen die Dateien im aktuellen Directory.
#copy <relfile> [<checksum>]
Kopiert die in <relfile> angegebene Datei in das aktuelle Directory.
Falls eine <checksum> angegeben ist, wird diese mit der Prüfsumme
der zu kopierenden Datei verglichen und im Fehlerfall eine Fehlermeldung
(Abbruch/ignorieren/nochmal) erzeugt. Die Prüfsumme entspricht der
von ARC verwendeten CRC-ähnlichen Prüfsumme.
Da im #copy-Befehl nur ein Pfad angegeben wird, müssen daraus sowohl
der Quell- als auch der Zielpfad gewonnen werden. Dazu wird <relfile>
in einen relativen Pfad <relpath> und einen Dateinamen <filename>
zerlegt. Das aktuelle Directory wird als <current dir> bezeichnet.
<install dir> sei das Directory, von dem die Install-Datei gelesen
wurde. Dann wird die Datei <install dir>\<relpath>\<filename> nach
<current dir>\<filename> kopiert, entspricht also dem Unix-Befehl
(für MS-DOS muss nur cp durch copy ersetzt werden)
cp <install dir>\<relpath>\<filename> <current dir>\<filename>
#extract <relfile> <pattern>
Extrahiert aus dem Archiv <relfile> die mit <pattern> angegebenen
Dateien. Mit den Definitionen beim #copy-Befehl ist der vollständige
Name des Archivs dann <install dir>\<relfile>, die in <pattern>
angegebenen Dateien werden in das <current dir> extrahiert. Das Format
des Archivs ist kompatibel zu LHARC (LZH-Dateien).
#replace "<string1>" "<string2>" <absfile>
Ersetzt in der durch <absfile> angegebenen Datei alle Vorkommen von
<string1> durch <string2>. In allen drei Parametern kann eine Filevaria-
ble vorkommen.
Dieser Befehl wird vor allem dazu benutzt, um bestimmte Setup-
Dateien (z.B. texsetup) zu installieren. Dort kann dann z.B.
"K:\TEX\" durch den Wert der Variablen target ersetzt werden:
#replace "K:\\TEX\\" "target" target\texsetup
Achtung: Filevariablen hören immer mit einem '\' auf. Es ist also sinn-
voller, "ROOT\\" durch "target" zu ersetzen, als "ROOT", weil im letzteren
Fall noch ein '\' angehängt würde.
#checkdisklabel <filename>
Falls die Installation von Diskette erfolgt (<install dir> ist auf
A: oder B:), wird das Diskettenlabel überprüft. Wenn es nicht mit
<filename> übereinstimmt, wird der Benutzer ermahnt, doch bitte die
richtige Diskette einzulegen. Es ist möglich, diesen Hinweis zu ignorieren.
#execute <abspath> (<parameter>)*
<abspath> gibt den Namen des zu startenden Programmes an, parameter sind
die zu übergebenden Parameter, wobei diese als Pfade interpretiert werden.
Wenn also am Anfang eines Parameters eine Filevariable steht, so wird
diese expandiert.
#end
Beendet die Installation (und damit auch das Ausführen der Install-Datei)
und gibt die Abschlu₧meldung ("erfolgreich" oder Anzahl der aufgetretenen
Probleme) aus. Anschlie₧end wird der Benutzer gefragt, ob er weitere
Software installieren möchte oder das Programm verlassen möchte.
4. Sonstiges
============
Es gibt eine spezielle Filevariable mit dem Namen source-dir, die mit dem
Pfad der Install-Datei und damit der Quelle aller zu kopierenden Dateien
vorbelegt ist. Eine Änderung dieser Variable führt *nicht* zu einer Änderung
des Verhaltens der #copy-Funktion, weil diese Variable bei Programmstart
lediglich initialisiert wird, später aber intern weder abgefragt noch ver-
wendet wird.